% !Mode:: "TeX:UTF-8"
\section{边缘检测}

\subsection{问题}

开发程序，以实现Laplacian、Roberts、Sobel和Prewitt边缘检测算法。


\subsection[背景原理]{背景原理}
\subsubsection{Laplacian边缘检测算法}
其原理为计算二阶导数，实际中可定义一个算子：
$$
\begin{vmatrix}
-1&-1&-1\\
-1&8&-1\\
-1&-1&-1
\end{vmatrix}
$$
对原图形使用此算子计算，得出结果图像

\subsubsection{Roberts边缘检测算法}
其算法是：对于一像素的$3\times 3$邻域
$$
\begin{vmatrix}
z_1&z_2&z_3\\
z_4&z_5&z_6\\
z_7&z_8&z_9
\end{vmatrix}
$$
计算像素的灰度值为：$\sqrt{(z_9-z_5)^2+(z_8-z_6)^2}$,为了简化计算，使用算术和$|z_9-z_5|+|z_8-z_6|$来替代。

\subsubsection{Sobel边缘检测算法}
对于像素$f(x,y)$定义：
$$
\mbox{$x$方向的算子}A=
\begin{vmatrix}
-1&0&1\\
-2&0&2\\
-1&0&1
\end{vmatrix}
\quad
\mbox{$y$方向的算子}B=
\begin{vmatrix}
-1&-2&-1\\
0&0&0\\
1&2&1
\end{vmatrix}
$$
最后结果灰度值为$Af+Bf$

\subsubsection{Prewitt边缘检测算法}
类似于Sobel算法，但是算子定义为：
$$
\mbox{$x$方向的算子}A=
\begin{vmatrix}
-1&0&1\\
-1&0&1\\
-1&0&1
\end{vmatrix}
\quad
\mbox{$y$方向的算子}B=
\begin{vmatrix}
-1&-1&-1\\
0&0&0\\
1&1&1
\end{vmatrix}
$$

\subsection{程序代码说明}

本程序代码位于 src/q7\_edge\_detection/q7.py。借用了第三题：空域滤波中设计的空域滤波代码，来实现上述四种算法。根据各自原理，设计模板和处理函数。

其中Prewitt和Sobel算子分别编写了x,y两个方向的滤波器。

处理函数{\bf process} 基本都是对传入的v数组简单求和。Robert的{\bf process}函数如下：
\begin{lstlisting}
    def process(self,v):
        return  abs(v[8]-v[4])+abs(v[7]-v[5])
\end{lstlisting}

\subsection{实验结果与分析}

\begin{longtable}{ll}
\caption{边缘检测} \\
%\toprule
%\multicolumn{2}{c}{边缘检测} \\
%\midrule
%\endfirsthead
%\midrule
%\multicolumn{2}{c}{边缘检测} \\
%\midrule
\endhead
\midrule
\multicolumn{2}{r}{接下页\dots} \\
\endfoot
\endlastfoot
\hline

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular}{l}
Laplacian\\
\includegraphics[height=5cm]{../output/Q7_Laplacian.jpg}
\end{tabular}
&
\begin{tabular}{l}
Roberts\\
\includegraphics[height=5cm]{../output/Q7_Roberts.jpg}
\end{tabular}
\\
\hline
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{tabular}{l}
Sobel  \\
\includegraphics[height=5cm]{../output/Q7_Sobel.jpg}
\end{tabular}
&
\begin{tabular}{l}
Prewitt \\
\includegraphics[height=5cm]{../output/Q7_Prewitt.jpg}
\end{tabular}
\\
\bottomrule
\end{longtable} 